// 时间管理工具类
// 统一管理游戏中的时间计算，确保在不同帧率下的一致性

export class TimeManager {
    /**
     * 将秒转换为毫秒
     * @param {number} seconds 秒数
     * @returns {number} 毫秒数
     */
    static secondsToMs(seconds) {
        return seconds * 1000;
    }
    
    /**
     * 将毫秒转换为秒
     * @param {number} milliseconds 毫秒数
     * @returns {number} 秒数
     */
    static msToSeconds(milliseconds) {
        return milliseconds / 1000;
    }
    
    /**
     * 更新基于时间的值
     * @param {number} currentValue 当前值
     * @param {number} deltaTime 时间增量（毫秒）
     * @param {number} decreaseRate 每秒减少的量（可选，默认为1）
     * @returns {number} 更新后的值
     */
    static updateTimeValue(currentValue, deltaTime, decreaseRate = 1) {
        if (currentValue <= 0) return 0;
        const decrease = (deltaTime / 1000) * decreaseRate;
        return Math.max(0, currentValue - decrease);
    }
    
    /**
     * 更新基于毫秒的计时器
     * @param {number} currentTime 当前剩余时间（毫秒）
     * @param {number} deltaTime 时间增量（毫秒）
     * @returns {number} 更新后的剩余时间
     */
    static updateTimer(currentTime, deltaTime) {
        return Math.max(0, currentTime - deltaTime);
    }
    
    /**
     * 检查计时器是否已结束
     * @param {number} time 时间值
     * @returns {boolean} 是否已结束
     */
    static isTimeUp(time) {
        return time <= 0;
    }
    
    /**
     * 计算时间进度（0-1之间）
     * @param {number} currentTime 当前时间
     * @param {number} totalTime 总时间
     * @returns {number} 进度值（0-1）
     */
    static getProgress(currentTime, totalTime) {
        if (totalTime <= 0) return 0;
        return Math.max(0, Math.min(1, currentTime / totalTime));
    }
    
    /**
     * 更新动画相位（用于周期性动画）
     * @param {number} currentPhase 当前相位
     * @param {number} deltaTime 时间增量（毫秒）
     * @param {number} speed 相位变化速度（弧度/秒）
     * @returns {number} 更新后的相位
     */
    static updatePhase(currentPhase, deltaTime, speed = 1) {
        return currentPhase + (deltaTime / 1000) * speed;
    }
    
    /**
     * 游戏时间常量定义
     */
    static get CONSTANTS() {
        return {
            // 玩家相关时间（毫秒）
            PLAYER_INVULNERABLE_TIME: 3000,    // 3秒无敌时间
            PLAYER_HIT_FLASH_TIME: 500,        // 500毫秒闪烁时间
            PLAYER_SHIELD_WAVE_TIME: 1000,     // 1秒护盾波纹时间
            
            // 道具持续时间（毫秒）
            MULTISHOT_DURATION: 20000,         // 10秒多发装置
            
            // 粒子生命周期（毫秒）
            PARTICLE_LIFE: 500,                // 500毫秒粒子生命
            HEAL_PARTICLE_LIFE: 1000,          // 1秒治疗粒子
            POWER_PARTICLE_LIFE: 667,          // 约667毫秒能量粒子
            SHIELD_PARTICLE_LIFE: 833,         // 约833毫秒护盾粒子
            
            // 动画速度（弧度/秒）
            ENGINE_PULSE_SPEED: 18.85,         // 引擎脉冲速度（约3Hz）
            SHIELD_PHASE_SPEED: 9.42,          // 护盾相位速度（约1.5Hz）
            BULLET_GLOW_SPEED: 12.57,          // 子弹发光速度（约2Hz）
            STAR_TWINKLE_SPEED: 6.28,          // 星星闪烁速度（约1Hz）
            
            // 精英敌机爆炸效果（毫秒）
            ELITE_EXPLOSION_LIFE: 2000,        // 2秒精英敌机爆炸效果
            
            // 玩家爆炸效果（毫秒）
            PLAYER_EXPLOSION_LIFE: 3000,       // 3秒玩家爆炸效果
            
            // BOSS爆炸效果（毫秒）
            BOSS_EXPLOSION_LIFE: 4000,         // 4秒BOSS巨大爆炸效果
        };
    }
}